/**
 * @file 	 dyp_485.h
 * @brief       
 * @author 	 wenbo
 * @version  1.0
 * @date 	 2022-02-22
 * 
 * @copyright Copyright (c) 2022  YGL
 * 
 */

#ifndef __DYP_485_H
#define __DYP_485_H

#include "../../bsp/bsp.h"

#define SENS_NUMS   4   // 一拖四

// 寄存器地址定义
/****************************************************************/
#define ADDR_SENS_1         0x0106      //探头1数据寄存器
#define ADDR_SENS_2         0x0107      //探头2数据寄存器
#define ADDR_SENS_3         0x0108      //探头3数据寄存器
#define ADDR_SENS_4         0x0109      //探头4数据寄存器
#define ADDR_SLAVE_ID       0x2000      //从机地址更改寄存器


// 超声波传感器驱动结构
/****************************************************************/
// 485通信相关
typedef struct {
    uint8_t 	slave_id;    	            // modbus slave id
    uint8_t 	port;    		            // modbus uart port
    uint32_t 	speed;   		            // modbus uart speed
    uint8_t 	rec_data[20];               // modbus recive buffer
    uint8_t 	rec_len; 		            // modbus recive data length
}Type_dyp_Com_Def;

// dyp 结构
typedef struct
{
    bool        isInitOk;                   // 是否初始化
    uint16_t    sensdatas[SENS_NUMS];       // 传感器数据

    Type_dyp_Com_Def    com;                // 通信结构
}Type_dyp_Def;



// API 接口
/************************************************************************/
/**
 * @brief       初始化超声波采集板
 * @param[in]	pList               采集板列表
 * @param[in]	listLen             采集板列表长度
 * @return      bool                执行成功返回true
 */
extern bool xp_dyp_init(Type_dyp_Def* const pList, uint8_t listLen);

/**
 * @brief       驱动卸载
 * @return      bool                执行成功返回true
 */
extern bool xp_dyp_Deinit(void);


/************************************************************************/
/**
 * @brief       获取传感器数据（采集 SENS_NUMS 个探头数据并返回结果）
 * @param[in]	devId               采集板序号
 * @param[out]	pResult             采集板结果数组
 * @return      bool                执行成功返回true
 */
extern bool xp_dyp_get_all_data(int devId, uint16_t pResult[]);

/**
 * @brief       获取传感器数据（指定探头id）
 * @param[in]	devId               采集板序号
 * @param[in]	probeId             探头序号
 * @param[out]	pResult             指定探头数据结果
 * @return      bool                执行成功返回true
 */
extern bool xp_dyp_get_single_data(int devId, int probeId, uint16_t *pResult);
#endif